package com.ruoyi.system.service.impl;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.SparePartsInventory;
import com.ruoyi.system.mapper.SparePartsInventoryMapper;
import com.ruoyi.system.service.ISparePartsInventoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;

/**
 * 备件库存管理Service业务层处理
 *
 * @author ruoyi
 * @date 2025-03-19
 */
@Service
public class SparePartsInventoryServiceImpl implements ISparePartsInventoryService {
    @Autowired
    private SparePartsInventoryMapper sparePartsInventoryMapper;
    private static int sequence = 0; // 序列号
    private static final int MAX_SEQUENCE = 999; // 序列号最大值
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyMM"); // 年月格式

    public synchronized static String generateSerialNumber() {
        // 获取当前日期的年月
        String datePart = dateFormat.format(new Date());


        Random random = new Random();
        // 生成100到999之间的随机数
        Integer sequence = random.nextInt(900) + 100;


        // 计算序列号部分，确保是三位数
        String serialPart = String.format("%03d", sequence);

        // 组装最终的编号
        String serialNumber = "SP" + datePart + serialPart;

        // 更新序列号
        sequence++;
        if (sequence > MAX_SEQUENCE) {
            sequence = 0; // 超过999时重置序列号
        }

        return serialNumber;
    }

    public static void main(String[] args) {
        // 测试生成编号
        for (int i = 0; i < 10; i++) { // 假设连续生成10个编号作为测试
            System.out.println(generateSerialNumber());
        }
    }

    /**
     * 查询备件库存管理
     *
     * @param partNo 备件库存管理主键
     * @return 备件库存管理
     */
    @Override
    public SparePartsInventory selectSparePartsInventoryByPartNo(String partNo) {
        return sparePartsInventoryMapper.selectSparePartsInventoryByPartNo(partNo);
    }

    /**
     * 查询备件库存管理列表
     *
     * @param sparePartsInventory 备件库存管理
     * @return 备件库存管理
     */
    @Override
    public List<SparePartsInventory> selectSparePartsInventoryList(SparePartsInventory sparePartsInventory) {
        return sparePartsInventoryMapper.selectSparePartsInventoryList(sparePartsInventory);
    }

    /**
     * 新增备件库存管理
     *
     * @param sparePartsInventory 备件库存管理
     * @return 结果
     */
    @Override
    public int insertSparePartsInventory(SparePartsInventory sparePartsInventory) {
        sparePartsInventory.setCreateTime(DateUtils.getNowDate());
        sparePartsInventory.setPartNo(generateSerialNumber());
        return sparePartsInventoryMapper.insertSparePartsInventory(sparePartsInventory);
    }

    /**
     * 修改备件库存管理
     *
     * @param sparePartsInventory 备件库存管理
     * @return 结果
     */
    @Override
    public int updateSparePartsInventory(SparePartsInventory sparePartsInventory) {
        sparePartsInventory.setUpdateTime(DateUtils.getNowDate());
        return sparePartsInventoryMapper.updateSparePartsInventory(sparePartsInventory);
    }

    /**
     * 批量删除备件库存管理
     *
     * @param partNos 需要删除的备件库存管理主键
     * @return 结果
     */
    @Override
    public int deleteSparePartsInventoryByPartNos(String[] partNos) {
        return sparePartsInventoryMapper.deleteSparePartsInventoryByPartNos(partNos);
    }

    /**
     * 删除备件库存管理信息
     *
     * @param partNo 备件库存管理主键
     * @return 结果
     */
    @Override
    public int deleteSparePartsInventoryByPartNo(String partNo) {
        return sparePartsInventoryMapper.deleteSparePartsInventoryByPartNo(partNo);
    }

    @Override
    public List<SparePartsInventory> selectSparePartsInventoryLists(SparePartsInventory sparePartsInventory) {
        return sparePartsInventoryMapper.selectSparePartsInventoryLists(sparePartsInventory);
    }
}
